package board.pieces;

import java.awt.Color;

import board.grid.Grid;
import board.grid.Space;
/** A basic occupant for a Grid.  This could
 *  serve as a base on which types of occupants
 *  can be build.  This interface outlines
 *  basic functions almost all occupants are
 *  suggested to have, but are not required.  
 * 
 * @author R.Wisniewski1101
 */
public interface Piece {
	/** Get the current space that this piece
	 *  is aware that it is in.  
	 * 
	 * @return - the current space
	 */
	public Space				getCurrentSpace();
	/** Get the grid on which this piece is
	 *  aware that it is located.  
	 * 
	 * @return - the current grid
	 */
	public Grid<? super Piece>	getGrid();
	/** Place this piece on a Grid in the given
	 *  space.  
	 * 
	 * @param grid - the grid on which to be placed
	 * @param space - the space in which to be placed
	 */
	public void					putSetfOnGrid(Grid<? super Piece> grid, Space space);
	/** Remove this piece from the Grid.  */
	public void					removeSelfFromGrid();
	/** Move this piece to a new location.  
	 * 
	 * @param space - the space to which to move
	 */
	public void					moveTo(Space space);
	/** Change the color of this piece.  The
	 *  color will, in the default render, be
	 *  represented as the color of the circle.  
	 *  
	 *  This color COULD be used to represent
	 *  information such as team or level.  
	 *  This system is recommended to save
	 *  memory, but is completely optional.  
	 * 
	 * @param color - the new color
	 */
	public void 		setColor(Color color);
	/** Get the current color of this piece.  
	 *  This color is the color of the circle
	 *  in the default render.  
	 *  
	 *  This color COULD be used to represent
	 *  information such as team or level.  
	 *  This system is recommended to save
	 *  memory, but is completely optional. 
	 *  
	 * @return - the current color
	 */
	public Color		getColor();
}
